package ctrLayer;
import modelLayer.*;


/**
 * Person controlleren er mellemledet mellem UI-laget og modellaget.
 * 
 * @author (Gruppe 2. Jonas, Danny, Kasper, Bruno & Jesper) 
 * @version (17/12-2012)
 */
public class PersonCtr
{
    // Attributter
    private PersonContainer pc = PersonContainer.getInstance();

    /**
     * Konstruktør for person controlleren.
     */
    public PersonCtr()
    {
        
    }
    
    /**
     * Opret en person og tilføj til person containeren.
     * 
     * @param   ansat   Ansat objekt som skal associeres med personen.
     * @param   kunde   Kunde objekt som skal associeres med personen.
     * @param   navn    Personens navn.
     * @param   adresse Personens adresse.
     * @param   postNr  Personens post nummer.
     * @param   by      Personens by.
     * @param   tlf     Personens tlf.
     * @param   email   Personens email.
     * @throws  IllegalStateException   Kastes hvis en person med samme tlf nr. findes.
     */
    public void opretPerson(Ansat ansat, Kunde kunde, String navn, String adresse,
        String postNr, String by, String tlf, String email) throws Exception
    {
        // Find ud af, om en person med samme tlf nr findes.
        Person p = findPerson(tlf);
        
        if (p == null)
        {
            Person person = new Person(ansat, kunde, navn , adresse, postNr, by, tlf, email);
            pc.tilfoejPerson(person);
        } else {
            throw new IllegalStateException("En person med samme tlf nr. findes allerede.");
        }
    }
    
    /**
     * Gør personen til en erhvervskunde.
     */
    public void udvidTilErhverv(Person p, String firmaNavn, String kreditNr)
    {
        Erhverv e = new Erhverv(firmaNavn, kreditNr);
        p.setKunde(e);
    }
    
    /**
     * Gør personen til en privatkunde.
     * 
     * @param   p   Personen som skal gøres til privatkunde.
     */
    public void udvidTilPrivat(Person p)
    {
        p.setKunde(new Privat());
    }

    /**
     * Find en person ud fra telefon nummeret i person containeren.
     * 
     * @param   tlf     Personens telefon nummer der skal søges på.
     */
    public Person findPerson(String tlf)
    {
       return pc.findPerson(tlf); 
    }
    
    /**
     * Sletter personen
     * 
     * @param   tlf     Personens telefon nummer der skal søges på.
     */
    public void sletPerson(String tlf) throws Exception
    {
        if (!pc.sletPerson(tlf))
            throw new IllegalStateException("Personen findes ikke!");
    }
}